package com.niuwa.p2p.service.productTemplate;

import java.util.List;
import java.util.Map;

import com.niuwa.p2p.core.mvc.entity.PageBean;
import com.niuwa.p2p.entity.productTemplate.ProductTemplate;
import com.niuwa.p2p.vo.productTemplate.InvestProdTemplateVo;
import com.niuwa.p2p.vo.productTemplate.InvestProdTmptForm;
import com.niuwa.p2p.vo.productTemplate.InvestProdTmptVo;

public interface IInvestProdTemplateService {

	/**
	 * 分页查询产品模板集合
	 * 根据paramMap，选取需要的产品模板集合 
	 * 
	 * @param paramMap 过滤得条件Map
	 * @return PageBean<CustomerVo> 分页信息与分页数据集合（产品模板集合） 
	 */
	public PageBean<InvestProdTemplateVo> search(Map<String, Object> paramMap);

	/**
	 * 删除产品模板
	 * 
	 * @param tempId 产品模板ID
	 * @return 更新条数
	 * @throws 删除失败(更新DB失败)
	 */
	public int deleteProductTmplt(long tempId) throws Exception;

	/**
	 * 通过审批
	 * 
	 * @param tempId 产品模板ID
	 * @return 更新条数
	 * @throws 更新失败(更新产品模板状态失败, 添加审批记录失败)
	 */
	int updateProductTmpltToPass(long tempId, long operatorId) throws Exception;
	
	/**
	 * 拒绝审批
	 * 
	 * @param tempId 产品模板ID
	 * @param rejectReason 拒绝理由
	 * @return 更新条数
	 * @throws 更新失败(更新产品模板状态失败, 添加审批记录失败)
	 */
	int updateProductTmpltToReject(long tempId, String rejectReason, long operatorId)
			throws Exception;

	
	/**
	 * 添加模板
	 * 
	 * @param userId 当前用户ID
	 * @param form   前台表单数据
	 * @throws Exception
	 */
	public void addInestProductTmplt(long userId, InvestProdTmptForm form) throws Exception; 
	
	
	
	/**
	 * 根据模板ID获取产品模板所有信息
	 * 
	 * @param tempId
	 * @return InvestProdTmptVo
	 */
	public InvestProdTmptVo getProdTmptById(long tempId);
	
	/**
	 * 根据产品模板类型、状态获取模板信息
	 * @param paramMap 过滤得条件
	 * @return List<ProductTemplate> 模板集合 
	 */
	public List<ProductTemplate> findInvestProdTempByCondition(String type);
	
	/**
	 * 根据产品模板名称获取对应版本 
	 * @param paramMap 过滤得条件
	 * @return List<InvestProdTemplateVo> 模板集合 
	 */
	public List<InvestProdTemplateVo> findProdVersionByCondition(String tempName);
	
	/**
	 * 根据模板Id获取产品模板信息
	 * @param tempId
	 * @return
	 */
	public Object findInvestProdTemplateByCondition(long tempId); 
	
	/**
	 * 根据模版名称、版本号查询模版信息
	 * 
	 * @param productTemplate
	 * @return
	 */
	public int findProductTmptByName(ProductTemplate productTemplate);
}
